package cn.yunyichina.provider.framework.dubbo.service;

import cn.yunyichina.provider.framework.data.SpringContextHandler;
import cn.yunyichina.provider.iface.entity.PersonalUser;
import cn.yunyichina.provider.iface.entity.PersonalUserOpenid;
import cn.yunyichina.provider.iface.entity.base.*;
import cn.yunyichina.provider.iface.entity.common.Response;
import cn.yunyichina.provider.iface.service.IBase;
import cn.yunyichina.utils.convert.JsonUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BaseService {

    static final String serviceName = "baseService";

    static IBase baseService = null;

    static {
        baseService = (IBase) SpringContextHandler.getBean(serviceName);
    }
    
    public static IBase getBaseClient(){
    	return baseService;
    }

    public static Response callUnderlineFromInternal(String method, String data) {
        return baseService.callUnderlineFromInternal("", method, data, (short) 0);
    }

    public static Response callUnderlineFromInternal(String sessionId, String method, String data) {
        return baseService.callUnderlineFromInternal(sessionId, method, data, (short) 0);
    }

    public static Response callHumpFromInternal(String sessionId, String method, String data) {
        return baseService.callHumpFromInternal(sessionId, method, data, (short) 0);
    }

    public static Response callHumpFromInternal(String method, String data) {
        return baseService.callHumpFromInternal("", method, data, (short) 0);
    }
    
   
    /**
     * 根据code查询Org
     * <br>内部调用接口
     * @param data
     * @return 如果查询到1个，返回Org对象，如果没有找到或多于1个，返回null
     */
    public Org getOrgByCode(String orgCode) {
    	return baseService.getOrgByCode(orgCode);
    }
    
    /**
     * 获取openid对象
     * @param userId
     * @param appId
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    public PersonalUserOpenid getPersonalUserOpenid(String userId,String appId,String openId) {
    	return baseService.getPersonalUserOpenid(userId, appId,openId);
    }
    
    /**
     * 根据身份证获取用户对象
     * @param idCardNo
     * @param idCardType 1：二代身份证，               2：港澳居民身份证，               3：台湾居民身份证，               4：护照         
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    public PersonalUser getPersonalUserByIdCardNo(String idCardNo,short idCardType)  {
    	return baseService.getPersonalUserByIdCardNo(idCardNo,idCardType);
    }
    
    /**
     * 根据身份证获取用户对象
     * @param mobile
     * @return 如果没有找到，或者参数为空的，返回null。如果找到多个，返回第一个
     */
    public PersonalUser getPersonalUserByMobile(String mobile)  {
    	return baseService.getPersonalUserByMobile(mobile);
    }
    
    /**
     * 获得订单
     * @param orderNo
     * @return
     */
    public OrderExtVo getOrderByOrderNo(String orderNo) {
    	return baseService.getOrderByOrderNo(orderNo);
    }
    
    /**
     * 更新订单数据,根据
     * yyt.base.order.update
     * 如果包含了订单项，则会删除原来的所有订单项，然后执行新增订单项的操作
     * @param data
     */
    public static OrderExtVo updateOrder(String data) {
    	return baseService.updateOrder(data);
    }
    
    /**
     * 新增订单
     * yyt.base.order.add
     * @param data trade_type 交易类型，1支付，2退款
     */
    public static OrderExtVo addOrder(String data) {
    	return baseService.addOrder(data);
    }
    

    /**
     * 根据id查询org组织
     * @param data
     * @return
     */
    public static Response findOrgById(String orgId) {
    	return baseService.findOrgById(orgId);
    }
    
    /**
     * 根据appCode 获得OrgApp对象
     * <br>内部调用接口
     * @param orgAppCode
     * @return 如果没有找到，返回null
     */
    public static OrgApp getOrgAppByAppCode(String orgAppCode) {
    	return baseService.getOrgAppByAppCode(orgAppCode);
    }
    
    /**
     * 根据诊疗卡号查询用户。用于消息发送
     * @param data 
     * @param orgCode
     * @param medicalCardNo
     * @param medicalCardType 卡类型\r\n            1	院内诊疗卡\r\n            2	社保卡\r\n            3	医保卡\r\n            4	区域健康卡\r\n            5	身份证\r\n            6	市民卡\r\n            7	患者唯一标识\r\n            8	临时诊疗卡\r\n            9	医疗证\r\n            10	银联卡\r\n            11	住院号
     * @param sessionid
     * @return
     */
    public static MedicalCardVo getMedicalCardByCardNo(String orgCode,String medicalCardNo,String medicalCardType,String appId,String openId) {
    	Map<String,Object> param = new HashMap<>();
    	param.put("org_code",orgCode);
    	param.put("medical_card_no",medicalCardNo);
    	param.put("medical_card_type",medicalCardType);
        param.put("open_id",openId);
    	return  baseService.getMedicalCardByCardNo(JsonUtils.toJsonString(param),"",appId);
    }

    /**
     * 通用查询
     * @param mapFilter 对应数据库字段名
     * @return
     */
   public static List<PersonalUser> listPersonalUser(String strJson) {
	   return baseService.listPersonalUser(strJson);
   }
   
   /**
    * 查询诊疗卡
    * @param strJson 对应数据库字段名
    * @return 
    */
   public static List<MedicalCardVo> listMedicalCard(String strJson) {
	   return baseService.listMedicalCard(strJson);
			   
   }
   

   
   /**
    * 查询订单
    * @param strJson
    * @return
    */
   public static List<OrderExtVo> listOrder(String strJson) {
	   return baseService.listOrder(strJson);
   }
   /**
    * 系统日志查询
    * @param strJson
    * @return
    */
   public Map<String,Object> listLog(String strJson) {
	   return baseService.listLog(strJson);
   }
   
   /**
    * 新增系统日志
    * @param strJson LogVo对象
    * @return
    */
   public Response insertLog(String strJson) {
	   return baseService.insertLog(strJson);
   }
   /**
	 * 查找匹配的提醒人
	 * @param org_id
	 * @param event_code 事件编码
	 * @return
	 */
   public static List<RemindSettingVo> matchRemindSetting(String orgId,String eventCode) {
	   Map<String,Object> param = new HashMap<>();
	   param.put("org_id",orgId);
	   param.put("event_code",eventCode);
	   return baseService.matchRemindSetting(JsonUtils.toJsonString(param));
   }
}
